package grupobbva.pe.operhc.domain;

import static grupobbva.pe.operhc.util.Constant.*;
import grupobbva.pe.operhc.util.GenericObject;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;

public class Cliente extends GenericObject {
	
	private String tipoDocumento;
    private String numeroDocumento;
    private String codigoCentral;
    private String grupoBuro;
    private String razonSocial;
    private String clasificacionBBVA;
    private String clasificacionSF;
    private String fechaEvaluacion;
    private BigDecimal porcentEndeudamiento;
    private String fechaIniCampanha;
    private String fechaFinCampanha;
    private String indRelevanciaPublica;
    private String estadoCliente;
    private String descEstado;
    private String fechaCambioEstado;
    private String indCliente;
    private String indDomiciliaNomina;
    private String segmentoComercial;
    private String descSegmentoComercial;
    private String tipoPersona;
    private String descPersona;
    private BigDecimal probabilidadMora;
    private String grupoRiesgoHC;
    private String emisora; //RUC
    private BigDecimal ingresoCliente;
    private String campanha;
    private String bureauHC;
    private String origenInformacion;
    private String descOrigen;
    private String indClienteReevaluado;
    private String indPerfil;
    private Integer antiguedadCliente;
    private Integer edadCliente;
    private String indTenenciaSubrogado;
    private BigDecimal ingresoEstimado;
    private BigDecimal importeCuota;
    private BigDecimal importeLimite;
    private BigDecimal valorTEA;
    private BigDecimal valorTEM;
    private String plazoCliente;
    private BigDecimal diferencialReactivo;
    private BigDecimal factorProactivo;
    private BigDecimal importeCuotaReactiva;
    private BigDecimal importeLimiteReactivo;
    private String canal;
    private BigDecimal ingresoFijo;
    private BigDecimal ingresoVariable;
    private BigDecimal tipoCambioUSDFixing;
    private String flujoOperativo;
    private String contrataHermes;

    private String productoLineasCredito;
    private String productoConsumo;
    private String productoHipotecario;
    private String productoTarjetasCredito;
    private String productoAcuerdos;
    private String productoPIDE;
    private String productoGarantiaReal;
    private String productoGarantiaPersonal;
    private String productoLibre01;
    private String productoLibre02;
    private String productoLibre03;
    private String productoLibre04;
    private String productoSubrogado;
    
    private List<Producto> listProductos;
    private List<Contrato> listContratos;

	public String getTipoDocumento() {
		return tipoDocumento;
	}

	public void setTipoDocumento(String tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	public String getNumeroDocumento() {
		return numeroDocumento;
	}

	public void setNumeroDocumento(String numeroDocumento) {
		this.numeroDocumento = numeroDocumento;
	}

	public String getCodigoCentral() {
		return codigoCentral;
	}

	public void setCodigoCentral(String codigoCentral) {
		this.codigoCentral = codigoCentral;
	}

	public String getGrupoBuro() {
		return grupoBuro;
	}

	public void setGrupoBuro(String grupoBuro) {
		this.grupoBuro = grupoBuro;
	}

	public String getRazonSocial() {
		return razonSocial;
	}

	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}

	public String getClasificacionBBVA() {
		return clasificacionBBVA;
	}

	public void setClasificacionBBVA(String clasificacionBBVA) {
		this.clasificacionBBVA = clasificacionBBVA;
	}

	public String getClasificacionSF() {
		return clasificacionSF;
	}

	public void setClasificacionSF(String clasificacionSF) {
		this.clasificacionSF = clasificacionSF;
	}

	public String getFechaEvaluacion() {
		return fechaEvaluacion;
	}

	public void setFechaEvaluacion(String fechaEvaluacion) {
		this.fechaEvaluacion = fechaEvaluacion;
	}

	public BigDecimal getPorcentEndeudamiento() {
		return porcentEndeudamiento;
	}

	public void setPorcentEndeudamiento(BigDecimal porcentEndeudamiento) {
		this.porcentEndeudamiento = porcentEndeudamiento;
	}

	public String getFechaIniCampanha() {
		return fechaIniCampanha;
	}

	public void setFechaIniCampanha(String fechaIniCampanha) {
		this.fechaIniCampanha = fechaIniCampanha;
	}

	public String getFechaFinCampanha() {
		return fechaFinCampanha;
	}

	public void setFechaFinCampanha(String fechaFinCampanha) {
		this.fechaFinCampanha = fechaFinCampanha;
	}

	public String getIndRelevanciaPublica() {
		return indRelevanciaPublica;
	}

	public void setIndRelevanciaPublica(String indRelevanciaPublica) {
		this.indRelevanciaPublica = indRelevanciaPublica;
	}

	public String getEstadoCliente() {
		return estadoCliente;
	}

	public void setEstadoCliente(String estadoCliente) {
		this.estadoCliente = estadoCliente;
	}

	public String getDescEstado() {
		return descEstado;
	}

	public void setDescEstado(String descEstado) {
		this.descEstado = descEstado;
	}

	public String getFechaCambioEstado() {
		return fechaCambioEstado;
	}

	public void setFechaCambioEstado(String fechaCambioEstado) {
		this.fechaCambioEstado = fechaCambioEstado;
	}

	public String getIndCliente() {
		return indCliente;
	}

	public void setIndCliente(String indCliente) {
		this.indCliente = indCliente;
	}

	public String getIndDomiciliaNomina() {
		return indDomiciliaNomina;
	}

	public void setIndDomiciliaNomina(String indDomiciliaNomina) {
		this.indDomiciliaNomina = indDomiciliaNomina;
	}

	public String getSegmentoComercial() {
		return segmentoComercial;
	}

	public void setSegmentoComercial(String segmentoComercial) {
		this.segmentoComercial = segmentoComercial;
	}
	
	public String getDescSegmentoComercial() {
		return descSegmentoComercial;
	}

	public void setDescSegmentoComercial(String descSegmentoComercial) {
		this.descSegmentoComercial = descSegmentoComercial;
	}

	public String getTipoPersona() {
		return tipoPersona;
	}

	public void setTipoPersona(String tipoPersona) {
		this.tipoPersona = tipoPersona;
	}

	public String getDescPersona() {
		return descPersona;
	}

	public void setDescPersona(String descPersona) {
		this.descPersona = descPersona;
	}

	public BigDecimal getProbabilidadMora() {
		return probabilidadMora;
	}

	public void setProbabilidadMora(BigDecimal probabilidadMora) {
		this.probabilidadMora = probabilidadMora;
	}

	public String getGrupoRiesgoHC() {
		return grupoRiesgoHC;
	}

	public void setGrupoRiesgoHC(String grupoRiesgoHC) {
		this.grupoRiesgoHC = grupoRiesgoHC;
	}

	public String getEmisora() {
		return emisora;
	}

	public void setEmisora(String emisora) {
		this.emisora = emisora;
	}

	public BigDecimal getIngresoCliente() {
		return ingresoCliente;
	}

	public void setIngresoCliente(BigDecimal ingresoCliente) {
		this.ingresoCliente = ingresoCliente;
	}

	public String getCampanha() {
		return campanha;
	}

	public void setCampanha(String campanha) {
		this.campanha = campanha;
	}

	public String getBureauHC() {
		return bureauHC;
	}

	public void setBureauHC(String bureauHC) {
		this.bureauHC = bureauHC;
	}

	public String getOrigenInformacion() {
		return origenInformacion;
	}

	public void setOrigenInformacion(String origenInformacion) {
		this.origenInformacion = origenInformacion;
	}

	public String getDescOrigen() {
		return descOrigen;
	}

	public void setDescOrigen(String descOrigen) {
		this.descOrigen = descOrigen;
	}

	public String getIndClienteReevaluado() {
		return indClienteReevaluado;
	}

	public void setIndClienteReevaluado(String indClienteReevaluado) {
		this.indClienteReevaluado = indClienteReevaluado;
	}

	public String getIndPerfil() {
		return indPerfil;
	}

	public void setIndPerfil(String indPerfil) {
		this.indPerfil = indPerfil;
	}

	public Integer getAntiguedadCliente() {
		return antiguedadCliente;
	}

	public void setAntiguedadCliente(Integer antiguedadCliente) {
		this.antiguedadCliente = antiguedadCliente;
	}

	public Integer getEdadCliente() {
		return edadCliente;
	}

	public void setEdadCliente(Integer edadCliente) {
		this.edadCliente = edadCliente;
	}

	public String getIndTenenciaSubrogado() {
		return indTenenciaSubrogado;
	}

	public void setIndTenenciaSubrogado(String indTenenciaSubrogado) {
		this.indTenenciaSubrogado = indTenenciaSubrogado;
	}
	
	public BigDecimal getIngresoEstimado() {
		return ingresoEstimado;
	}

	public void setIngresoEstimado(BigDecimal ingresoEstimado) {
		this.ingresoEstimado = ingresoEstimado;
	}

	public BigDecimal getImporteCuota() {
		return importeCuota;
	}

	public void setImporteCuota(BigDecimal importeCuota) {
		this.importeCuota = importeCuota;
	}

	public BigDecimal getImporteLimite() {
		return importeLimite;
	}

	public void setImporteLimite(BigDecimal importeLimite) {
		this.importeLimite = importeLimite;
	}

	public BigDecimal getValorTEA() {
		return valorTEA;
	}

	public void setValorTEA(BigDecimal valorTEA) {
		this.valorTEA = valorTEA;
	}

	public BigDecimal getValorTEM() {
		return valorTEM;
	}

	public void setValorTEM(BigDecimal valorTEM) {
		this.valorTEM = valorTEM;
	}

	public String getPlazoCliente() {
		return plazoCliente;
	}

	public void setPlazoCliente(String plazoCliente) {
		this.plazoCliente = plazoCliente;
	}

	public BigDecimal getDiferencialReactivo() {
		return diferencialReactivo;
	}

	public void setDiferencialReactivo(BigDecimal diferencialReactivo) {
		this.diferencialReactivo = diferencialReactivo;
	}

	public BigDecimal getFactorProactivo() {
		return factorProactivo;
	}

	public void setFactorProactivo(BigDecimal factorProactivo) {
		this.factorProactivo = factorProactivo;
	}

	public BigDecimal getImporteCuotaReactiva() {
		return importeCuotaReactiva;
	}

	public void setImporteCuotaReactiva(BigDecimal importeCuotaReactiva) {
		this.importeCuotaReactiva = importeCuotaReactiva;
	}

	public BigDecimal getImporteLimiteReactivo() {
		return importeLimiteReactivo;
	}

	public void setImporteLimiteReactivo(BigDecimal importeLimiteReactivo) {
		this.importeLimiteReactivo = importeLimiteReactivo;
	}

	public String getCanal() {
		return canal;
	}

	public void setCanal(String canal) {
		this.canal = canal;
	}

	public BigDecimal getIngresoFijo() {
		return ingresoFijo;
	}

	public void setIngresoFijo(BigDecimal ingresoFijo) {
		this.ingresoFijo = ingresoFijo;
	}

	public BigDecimal getIngresoVariable() {
		return ingresoVariable;
	}

	public void setIngresoVariable(BigDecimal ingresoVariable) {
		this.ingresoVariable = ingresoVariable;
	}

	public String getProductoLineasCredito() {
		return productoLineasCredito;
	}

	public void setProductoLineasCredito(String productoLineasCredito) {
		this.productoLineasCredito = productoLineasCredito;
	}

	public String getProductoConsumo() {
		return productoConsumo;
	}

	public void setProductoConsumo(String productoConsumo) {
		this.productoConsumo = productoConsumo;
	}

	public String getProductoHipotecario() {
		return productoHipotecario;
	}

	public void setProductoHipotecario(String productoHipotecario) {
		this.productoHipotecario = productoHipotecario;
	}

	public String getProductoTarjetasCredito() {
		return productoTarjetasCredito;
	}

	public void setProductoTarjetasCredito(String productoTarjetasCredito) {
		this.productoTarjetasCredito = productoTarjetasCredito;
	}

	public String getProductoAcuerdos() {
		return productoAcuerdos;
	}

	public void setProductoAcuerdos(String productoAcuerdos) {
		this.productoAcuerdos = productoAcuerdos;
	}

	public String getProductoPIDE() {
		return productoPIDE;
	}

	public void setProductoPIDE(String productoPIDE) {
		this.productoPIDE = productoPIDE;
	}

	public String getProductoGarantiaReal() {
		return productoGarantiaReal;
	}

	public void setProductoGarantiaReal(String productoGarantiaReal) {
		this.productoGarantiaReal = productoGarantiaReal;
	}

	public String getProductoGarantiaPersonal() {
		return productoGarantiaPersonal;
	}

	public void setProductoGarantiaPersonal(String productoGarantiaPersonal) {
		this.productoGarantiaPersonal = productoGarantiaPersonal;
	}

	public String getProductoLibre01() {
		return productoLibre01;
	}

	public void setProductoLibre01(String productoLibre01) {
		this.productoLibre01 = productoLibre01;
	}

	public String getProductoLibre02() {
		return productoLibre02;
	}

	public void setProductoLibre02(String productoLibre02) {
		this.productoLibre02 = productoLibre02;
	}

	public String getProductoLibre03() {
		return productoLibre03;
	}

	public void setProductoLibre03(String productoLibre03) {
		this.productoLibre03 = productoLibre03;
	}

	public String getProductoLibre04() {
		return productoLibre04;
	}

	public void setProductoLibre04(String productoLibre04) {
		this.productoLibre04 = productoLibre04;
	}

	public String getProductoSubrogado() {
		return productoSubrogado;
	}

	public void setProductoSubrogado(String productoSubrogado) {
		this.productoSubrogado = productoSubrogado;
	}

	public List<Producto> getListProductos() {
		return listProductos;
	}

	public void setListProductos(List<Producto> listProductos) {
		this.listProductos = listProductos;
	}

	public List<Contrato> getListContratos() {
		return listContratos;
	}

	public void setListContratos(List<Contrato> listContratos) {
		this.listContratos = listContratos;
	}
	
	public BigDecimal getTipoCambioUSDFixing() {
		return tipoCambioUSDFixing;
	}

	public void setTipoCambioUSDFixing(BigDecimal tipoCambioUSDFixing) {
		this.tipoCambioUSDFixing = tipoCambioUSDFixing;
	}

	public String getFlujoOperativo() {
		return flujoOperativo;
	}

	public void setFlujoOperativo(String flujoOperativo) {
		this.flujoOperativo = flujoOperativo;
	}
	
	public void definirFlujoOperativo() {
		if(segmentoComercial.matches(PATRON_PROACTIVO)) { //FAST
			if(SI.equalsIgnoreCase(indClienteReevaluado)) {
				flujoOperativo = COD_FLUJO_REFERIDOS;
				contrataHermes = NO;
			} else {
				flujoOperativo = COD_FLUJO_PROACTIVO;
				contrataHermes = SI;
			}
			
		} else if(segmentoComercial.matches(PATRON_CLASICO)) { //REGULAR
			flujoOperativo = COD_FLUJO_CLASICO;
			contrataHermes = NO;
		} else if(segmentoComercial.matches(PATRON_REFERIDOS)) { //SOLICITAR BOLETA Y SIMULAR
			flujoOperativo = COD_FLUJO_REFERIDOS;
			contrataHermes = NO;
		}
		
		
	}

	public String getContrataHermes() {
		return contrataHermes;
	}

	public void setContrataHermes(String contrataHermes) {
		this.contrataHermes = contrataHermes;
	}

	public void mapearNumericos() {
		porcentEndeudamiento = porcentEndeudamiento.divide(CIEN);
		probabilidadMora = probabilidadMora.divide(DIEZ_MILLON);
		ingresoCliente = ingresoCliente.divide(CIEN);
		ingresoEstimado = ingresoEstimado.divide(CIEN);
		importeCuota = importeCuota.divide(CIEN);
		importeLimite = importeLimite.divide(CIEN);
		valorTEA = valorTEA.divide(MIL);
		valorTEM = valorTEM.divide(MIL);
		diferencialReactivo = diferencialReactivo.divide(CIEN);
		factorProactivo = factorProactivo.divide(DIEZ_MILLON);
		importeCuotaReactiva = importeCuotaReactiva.divide(CIEN);
		importeLimiteReactivo = importeLimiteReactivo.divide(CIEN);
		ingresoFijo = ingresoFijo.divide(CIEN);
		ingresoVariable = ingresoVariable.divide(CIEN);
		tipoCambioUSDFixing = tipoCambioUSDFixing.divide(CIEN_MIL);
	}
	
	public void mapearProductos() {
		listProductos = new ArrayList<Producto>();
		validarProductoExistente(productoLineasCredito, LINEA_CREDITO);
		validarProductoExistente(productoConsumo, CONSUMO);
		validarProductoExistente(productoHipotecario, PRESTAMO_HIPOTECARIO);
		validarProductoExistente(productoTarjetasCredito, TARJETA_CREDITO);
		validarProductoExistente(productoAcuerdos, ACUERDOS);
		validarProductoExistente(productoPIDE, PIDE);
		validarProductoExistente(productoGarantiaReal, GARANTIA_REAL);
		validarProductoExistente(productoGarantiaPersonal, GARANTIA_PERSONAL);
		validarProductoExistente(productoLibre01, LIBRE1);
		validarProductoExistente(productoLibre02, LIBRE2);
		validarProductoExistente(productoLibre03, LIBRE3);
		validarProductoExistente(productoLibre04, LIBRE4);
		validarProductoExistente(productoSubrogado, SUBROGADO);
	}
	
	public void validarProductoExistente(String productoInfo, String codigoProducto) {
		if(StringUtils.isNotBlank(productoInfo)) {
			listProductos.add(new Producto().asignarTasaPlazoCuota(productoInfo, codigoProducto));
		}
	}	

}